home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / GMS / GMSDev / Source / E / Demos / RamboWorm.e < prev    next >
Encoding:
Text File  |  1998-04-12  |  5.2 KB  |  192 lines

  1. /* GMS-example
  2.  * Name:    RamboWorm.e
  3.  * Type:    Blitter example (converted from RamboWorm.c)
  4.  * Version: 1.0
  5.  * Author:  G. W. Thomassen (0000272e@lts.mil.no)
  6.  */
  7.  
  8. MODULE 'gms/dpkernel','gms/dpkernel/dpkernel','gms/graphics/pictures','gms/files/files',
  9.        'gms/screens','gms/system/register','gms/system/modules','gms/input/joydata',
  10.        'gms/graphics/screens','gms/blitter','gms/graphics/blitter'
  11.  
  12. ENUM NONE,ERR_LIB,ERR_SMOD,ERR_BMOD,ERR_JOY,ERR_SCR,
  13.      ERR_LOAD,ERR_RESTORE,ERR_BOB
  14.  
  15. DEF scr    :PTR TO screen,
  16.     joy    :PTR TO joydata,
  17.     rstore :PTR TO restore,
  18.     scrmod :PTR TO module,
  19.     bltmod :PTR TO module,
  20.     worm   :PTR TO bob,
  21.     back   :PTR TO picture,
  22.     backfile   :PTR TO filename,
  23.     bobfile    :PTR TO filename,
  24.     wormframes :PTR TO framelist
  25.  
  26. PROC init_all()
  27.   backfile := [ ID_FILENAME,'GMS:demos/data/PIC.Green' ]:filename
  28.   bobfile  := [ ID_FILENAME,'GMS:demos/data/PIC.Rambo' ]:filename
  29.  
  30.   wormframes:=[0,0, 32,0, 64,0, 96,0, 128,0, 160,0, 192,0, 224,0,
  31.                256,0, 288,0, 0,48, 32,48, 64,48, -1,-1]:framelist
  32.  
  33.   IF (dpkbase:=OpenLibrary('GMS:libs/dpkernel.library',0))=NIL THEN Raise(ERR_LIB)
  34.  
  35.   IF (scrmod:=Init([TAGS_MODULE,NIL,
  36.       MODA_NUMBER,    MOD_SCREENS,
  37.       MODA_TABLETYPE, JMP_AMIGAE,
  38.       TAGEND], NIL))=NIL THEN Raise(ERR_SMOD)
  39.       scrbase:=scrmod.modbase
  40.  
  41.   IF (bltmod:=Init([TAGS_MODULE,NIL,
  42.       MODA_NUMBER,    MOD_BLITTER,
  43.       MODA_TABLETYPE, JMP_AMIGAE,
  44.       TAGEND], NIL))=NIL THEN Raise(ERR_BMOD)
  45.       bltbase:=bltmod.modbase
  46.  
  47.   IF (joy:=Init(Get(ID_JOYDATA),NIL))=NIL THEN Raise(ERR_JOY)
  48.  
  49.   IF (back:=Load(backfile,ID_PICTURE))=NIL THEN Raise(ERR_LOAD)
  50.  
  51.   IF (scr:=Get(ID_SCREEN))=NIL THEN Raise(ERR_SCR)
  52. ENDPROC
  53.  
  54. PROC main() HANDLE
  55.   init_all()
  56.  
  57.   CopyStructure(back,scr)
  58.   scr.attrib := SCR_DBLBUFFER
  59.  
  60.   IF (Init(scr,NIL))=NIL THEN Raise(ERR_SCR)
  61.  
  62.   Copy(back.bitmap,scr.bitmap)
  63.  
  64.   CopyBuffer(scr,BUFFER2,BUFFER1)
  65.  
  66.   IF (rstore:=Init([TAGS_RESTORE,NIL,
  67.                     RSA_Entries,1,
  68.                     TAGEND],scr))=NIL THEN Raise(ERR_RESTORE)
  69.  
  70.   IF (worm:=Init([TAGS_BOB,NIL,
  71.                   BBA_GfxCoords,wormframes,
  72.                   BBA_Width, 32,
  73.                   BBA_Height,24,
  74.                   BBA_XCoord,150,
  75.                   BBA_YCoord,150,
  76.                   BBA_Attrib, BBF_RESTORE OR BBF_GENMASKS OR BBF_CLIP,
  77.                     BBA_SourceTags, ID_PICTURE,
  78.                     PCA_Source,     bobfile,
  79.                       PCA_BitmapTags, NIL,
  80.                       BMA_MemType,    MEM_BLIT,
  81.                       TAGEND,NIL,
  82.                     TAGEND,NIL,
  83.                   TAGEND],scr))=NIL THEN Raise(ERR_BOB)
  84.  
  85.   Show(scr)
  86.  
  87.   demo()
  88.  
  89.   Raise(NONE)
  90. EXCEPT DO
  91.   IF joy THEN Free(joy)
  92.   IF worm THEN Free(worm)
  93.   IF rstore THEN Free(rstore)
  94.   IF scr THEN Free(scr)
  95.   IF back THEN Free(back)
  96.   IF bltmod THEN Free(bltmod)
  97.   IF scrmod THEN Free(scrmod)
  98.   CloseDPK()
  99.   SELECT exception
  100.   CASE ERR_LIB; WriteF('Error: Opening dpkernel.library\n')
  101.   CASE ERR_SMOD; WriteF('Error: Init() (Screen-module)\n')
  102.   CASE ERR_BMOD; WriteF('Error: Init() (Blitter-module)\n')
  103.   CASE ERR_JOY; WriteF('Error: Init() (JoyData-object)\n')
  104.   CASE ERR_SCR; WriteF('Error: Opening screen\n')
  105.   CASE ERR_LOAD; WriteF('Error: Loading background-picture\n')
  106.   CASE ERR_RESTORE; WriteF('Error: Init() (Restore-object)\n')
  107.   CASE ERR_BOB; WriteF('Error: Init() (Blitter Object)\n')
  108.   ENDSELECT
  109.   CleanUp(0)
  110. ENDPROC
  111.  
  112. PROC demo()
  113.   DEF anim=0,fire=FALSE,frame,
  114.       x1,x2,y1,y2,ax1,ax2,ay1,ay2
  115.  
  116.   REPEAT
  117.     Activate(rstore)
  118.     DrawBob(worm)
  119.     WaitAVBL()
  120.     SwapBuffers(scr)
  121.  
  122.     INC anim  
  123.     IF (fire=FALSE)
  124.       IF (anim>5)
  125.         anim:=0
  126.         
  127.         frame:=worm.frame
  128.         INC frame
  129.         worm.frame:=frame
  130.  
  131.         IF (worm.frame>9) THEN worm.frame:=0
  132.       ENDIF
  133.     ELSEIF (anim>1)
  134.       IF (worm.frame<10) THEN worm.frame:=9
  135.  
  136.       frame:=worm.frame
  137.       INC frame
  138.       worm.frame:=frame
  139.       IF (worm.frame>12)
  140.         IF (joy.buttons AND JD_LMB)
  141.           worm.frame:=11
  142.         ELSE
  143.           worm.frame:=0
  144.           fire:=FALSE
  145.         ENDIF
  146.       ENDIF
  147.     ENDIF
  148.     Query(joy)
  149.     worm.xcoord:=worm.xcoord+joy.xchange
  150.     worm.ycoord:=worm.ycoord+joy.ychange
  151.     wrap(worm)
  152.  
  153.     IF (joy.buttons AND JD_LMB) THEN fire:=TRUE
  154.   UNTIL (joy.buttons AND JD_RMB)
  155.  
  156.   /* Screenwipe effect.. (sometimes ;^) )*/
  157.  
  158.   IF (FastRandom(5)=4)
  159.     ax1:=x1:=(scr.width-scr.height)/2
  160.     ay1:=y1:=NIL
  161.  
  162.     ax2:=x2:=scr.width-((scr.width-scr.height)/2)
  163.     ay2:=y2:=scr.height
  164.  
  165.     REPEAT
  166.       DrawLine(scr.bitmap,x1,y1,x2,y2,0)
  167.       DrawLine(scr.bitmap,ax1,ay1,ax2,ay2,0)
  168.       DrawLine(scr.bitmap,x1+1,y1,x2+1,y2,0)
  169.       DrawLine(scr.bitmap,ax1+1,ay1,ax2+1,ay2,0)
  170.       WaitAVBL()
  171.       SwapBuffers(scr)
  172.       
  173.       DrawLine(scr.bitmap,x1,y1,x2,y2,0)
  174.       DrawLine(scr.bitmap,ax1,ay1,ax2,ay2,0)
  175.       DrawLine(scr.bitmap,x1+1,y1,x2+1,y2,0)
  176.       DrawLine(scr.bitmap,ax1+1,ay1,ax2+1,ay2,0)
  177.       WaitAVBL()
  178.       SwapBuffers(scr)
  179.  
  180.       x1:=x1+2; x2:=x2+2
  181.       ax1:=ax1-2; ax2:=ax2-2
  182.     UNTIL (x1>=scr.width)
  183.   ENDIF
  184. ENDPROC
  185.  
  186. PROC wrap(bb:PTR TO bob)
  187.   IF (bb.xcoord < (bb.width*-1))        THEN bb.xcoord:=bb.destbitmap.width
  188.   IF (bb.xcoord > bb.destbitmap.width)  THEN bb.xcoord:=-bb.width
  189.   IF (bb.ycoord < (bb.height*-1))       THEN bb.ycoord:=bb.destbitmap.height
  190.   IF (bb.ycoord > bb.destbitmap.height) THEN bb.ycoord:=-bb.height
  191. ENDPROC
  192.